package com.sufen.common.request;

import com.sufen.common.exception.self.BizException;
import com.sufen.common.lag2.MultilingualUtil;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * @description:
 * @function: 基础的controller类，提供常用方法
 * @author: Liu Menglei
 * @Date: 2021/11/2 0002 22:54
 */
public class BaseController {

    public BaseController(){

    }

    //将json数据分装如response
    public void renderJson(HttpServletResponse response,String json){
        ResponseUtils.renderJson(response,json);
    }

    //封装错误的情况，这里可以考虑与CodeMsg结合来统一定义系统的错误编码
    public void renderErrorJson(HttpServletResponse response,String json){
        response.setStatus(500);
        ResponseUtils.renderJson(response,json);
    }

    protected String getRequestContent( HttpServletRequest request) throws BizException {
        String json = null;

        try{
            byte[] buffer = FileCopyUtils.copyToByteArray(request.getInputStream());
            //这里参照Sting的这个实现，应该学会使用Java中自带的注解来实现对参数的校验
            json = new String(buffer,request.getCharacterEncoding());
        }catch (UnsupportedEncodingException var4){
            //这里可以利用其他的插件进行一个多语的处理
            throw new BizException("body_encoding_violation", MultilingualUtil.getFWMessage("P_YS_FW-PUB_MDD-BACK_0001065667"
                    ,"字符编码不正确"));
        }catch (IOException ioException) {
            throw new BizException("body_read_error", MultilingualUtil.getFWMessage("P_YS_FW-PUB_MDD-BACK_0001065331",
                    "未传入正确的数据"));
        }

        if(StringUtils.isEmpty(json)){
            throw new BizException("body_read_error",MultilingualUtil.getFWMessage("P_YS_FW-PUB_MDD-BACK_0001065331",
                    "未传入正确的数据"));
        }else {
            //这里的意思是说如果要是程序发生了异常直接就不再返回结果了吗？应该是的
            return json;
        }
    }

}